package com.demo.java.OD401_450.OD407;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最优的投资方式(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146513177
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取产品数量、最大风险和最大成本
        String input_str1 = in.nextLine();
        String input_str2 = in.nextLine();
        String input_str3 = in.nextLine();
        String input_str4 = in.nextLine();

        // 解析输入数据
        int[] params = split(input_str1);
        int m = params[0];  // 产品数量
        int n = params[1];  // 最大风险
        int x = params[2];  // 最大成本

        // 读取回报值、风险值和成本值
        int[] nums1 = split(input_str2);  // 回报值
        int[] nums2 = split(input_str3);  // 风险值
        int[] nums3 = split(input_str4);  // 成本值

        // 计算每个产品的回报值 * 风险
        int[] nums4 = new int[m];
        for (int i = 0; i < m; i++) {
            nums4[i] = nums3[i] * nums1[i];
        }

        int max_value = 0;
        int target = 0;
        int i = 0;

        // 选择一个项目的情况
        while (true) {
            if (i >= m) {
                break;
            } else {
                if (nums2[i] <= x && nums3[i] <= n) {  // 检查是否符合风险和成本限制
                    if (nums4[i] > max_value) {  // 更新最大回报
                        max_value = nums4[i];
                        target = i;
                    }
                }
            }
            i++;
        }

        // 选择两个项目的情况
        int k = 0;
        int a = 0, b = 0;
        boolean flag = false;

        while (true) {
            if (k >= m) {
                break;
            } else {
                for (int j = k + 1; j < m; j++) {
                    if (nums2[k] + nums2[j] <= x && nums3[k] + nums3[j] <= n) {  // 检查组合是否符合限制
                        if (nums4[k] + nums4[j] > max_value) {  // 更新最大回报
                            max_value = nums4[k] + nums4[j];
                            a = k;
                            b = j;
                            flag = true;
                        }
                    }
                }
            }
            k++;
        }

        // 输出结果
        if (flag) {  // 如果选择了两个项目
            for (int j = 0; j < m; j++) {
                if (j == a) {
                    System.out.print(nums3[j] + " ");
                } else if (j == b) {
                    System.out.print(nums3[j] + " ");
                } else {
                    System.out.print(0 + " ");
                }
            }
        } else {  // 如果只选择了一个项目
            for (int j = 0; j < m; j++) {
                if (j == target) {
                    System.out.print(nums3[j] + " ");
                } else {
                    System.out.print(0 + " ");
                }
            }
        }
    }

    // 将输入的字符串分割成整数数组
    public static int[] split(String input_str) {
        String[] tmp2 = input_str.split(" ");
        int[] nums = new int[tmp2.length];
        for (int i = 0; i < tmp2.length; i++) {
            nums[i] = Integer.parseInt(tmp2[i]);
        }
        return nums;
    }
}
